 /*******************************************************************************
  * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.core.runtime.model;

 import org.eclipse.core.internal.runtime.InternalPlatform;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.MultiStatus;

 /**
  * An object which can create plug-in related model objects (typically when
  * parsing plug-in manifest files).
  * <p>
  * This class may be instantiated, or further subclassed.
  * </p>
  * @deprecated In Eclipse 3.0 the runtime was refactored and all
  * non-essential elements removed. This class provides facilities primarily intended
  * for tooling. As such it has been removed and no directly substitutable API provided.
  */

 public class Factory {
     private MultiStatus status;

     /**
      * Creates a factory which can be used to create plug-in model objects.
      * Errors and warnings during parsing etc. can be logged to the given
      * status via the <code>error</code> method.
      *
      * @param status the status to which errors should be logged
      */
     public Factory(MultiStatus status) {
         super();
         this.status = status;
     }

     /**
      * Returns a new configuration element model which is not initialized.
      *
      * @return a new configuration element model
      */
     public ConfigurationElementModel createConfigurationElement() {
         return new ConfigurationElementModel();
     }

     /**
      * Returns a new configuration property model which is not initialized.
      *
      * @return a new configuration property model
      */
     public ConfigurationPropertyModel createConfigurationProperty() {
         return new ConfigurationPropertyModel();
     }

     /**
      * Returns a new extension model which is not initialized.
      *
      * @return a new extension model
      */
     public ExtensionModel createExtension() {
         return new ExtensionModel();
     }

     /**
      * Returns a new extension point model which is not initialized.
      *
      * @return a new extension point model
      */
     public ExtensionPointModel createExtensionPoint() {
         return new ExtensionPointModel();
     }

     /**
      * Returns a new library model which is initialized to not export any
      * of its code.
      *
      * @return a new library model
      */
     public LibraryModel createLibrary() {
         return new LibraryModel();
     }

     /**
      * Returns a new plug-in descriptor model which is not initialized.
      *
      * @return a new plug-in descriptor model
      */
     public PluginDescriptorModel createPluginDescriptor() {
         return new PluginDescriptorModel();
     }

     /**
      * Returns a new plug-in fragment model which is not initialized.
      *
      * @return a new plug-in fragment model
      */
     public PluginFragmentModel createPluginFragment() {
         return new PluginFragmentModel();
     }

     /**
      * Returns a new plug-in prerequisite model which is initialized to
      * not export its code and to not require an exact match.
      *
      * @return a new plug-in prerequisite model
      */
     public PluginPrerequisiteModel createPluginPrerequisite() {
         return new PluginPrerequisiteModel();
     }

     /**
      * Returns a new plug-in registry model with an empty plug-in table.
      *
      * @return a new plug-in registry model
      */
     public PluginRegistryModel createPluginRegistry() {
         return new PluginRegistryModel();
     }

     /**
      * Returns a new URL model which is not initialized.
      *
      * @return a new URL model
      */
     public URLModel createURL() {
         return new URLModel();
     }

     /**
      * Handles an error state specified by the status. The collection of all logged status
      * objects can be accessed using <code>getStatus()</code>.
      *
      * @param error a status detailing the error condition
      */
     public void error(IStatus error) {
         status.add(error);
         if (InternalPlatform.DEBUG)
             System.out.println(error.toString());
     }

     /**
      * Returns all of the status objects logged thus far by this factory.
      *
      * @return a multi-status containing all of the logged status objects
      */
     public MultiStatus getStatus() {
         return status;
     }
 }

